The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Many enterprise data processing systems rely on clustered database servers to store and manage data. A clustered database server runs on a cluster of nodes. The nodes in a group may be in the form of computers (e.g. work stations, personal computers) interconnected via a network. Alternatively, the nodes may be the nodes of a grid, where each node is interconnected on a rack. Each node in a cluster shares direct access to shared-storage resources, such as a set of disks, or a file stored on the disk.
Some shared-storage resources are critical to the operation of the cluster and/or critical to the functioning of software hosted on the cluster. An example of such a shared-storage resource is a cluster registry, which stores information about the configuration of the cluster and/or the configuration of a database server hosted on the cluster. Each node in the cluster maintains a pointer to the cluster registry so that they may access it.
The term pointer refers to any data that identifies the storage location of a shared-storage resource, or the handle of a storage location. An example of a pointer is a path name.
To ensure availability of critical shared-resources, multiple copies (“replicas”) of the shared-storage resource can be maintained so that they contain identical information. Shared-storage resources mirrored in this way are referred to herein as mirrored shared-storage resources. A particular set of shared-storage resource being mirrored as replicas of each other are referred to herein as a mirrored group of shared-storage resources or as a mirrored group.
Each node in a cluster maintains a set of pointers with a pointer to each replica in a mirrored group. The set of pointers is referred to as mirrored-group pointers. When one or more replicas become unavailable, the nodes in a cluster may access another replica pointed to by a pointer from the mirrored-group pointers.
The members of a mirrored group can change. When this occurs, a message can be sent to the nodes in the cluster informing them of the change. The nodes change their local mirrored-group pointers to reflect the change.
When a change occurs in the mirrored group of a cluster, a node may not be operating or be part of the cluster and thus may never receive a message informing it of the change. When the node begins operating again as a member of the cluster, the mirrored group of pointers at the node may point to a former version of the mirrored group. It is possible that the mirrored-group pointers include a pointer that points to a shared-storage resource that is no longer being maintained as a replica, that is no longer up-to-date, and that may contain incorrect and critical information.
Based on the foregoing, there is a clear need for mechanisms to ensure that all the nodes that form a cluster have the latest and correct version of mirrored-group pointers, and that the nodes detect when a node has an incorrect version of mirrored-group pointers and that the mirrored-group pointers be corrected.